package com.cicc.springboot.controller;

import com.cicc.springboot.common.dto.OrderWithItemsDTO;
import com.cicc.springboot.common.dto.PurchaseOrderItemsDTO;
import com.cicc.springboot.common.dto.R;
import com.cicc.springboot.entity.MaterialZmaraEntity;
import com.cicc.springboot.entity.OrderItemEntity;
import com.cicc.springboot.service.OrderDetailsService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * Author: 张月鹿
 */

@RestController
@RequestMapping("/orderDetails")
@AllArgsConstructor
public class OrderDetailsController {
    @Autowired
    private OrderDetailsService orderDetailsService;

    /**
     * 根据订单编码获取订单详细信息
     * 此接口用于从服务器获取特定订单的详细信息，包括订单中的所有项目
     * 它通过订单编码来唯一标识一个订单，因此需要确保传入的订单编码是正确的
     *
     * @param orderCode 订单编码，用于唯一标识一个订单，格式为字符串
     * @return 返回一个订单详细信息的列表，每个订单可能包含多个项目
     */
    @GetMapping("/orders/{orderCode}")
    public List<OrderWithItemsDTO> getOrders(@PathVariable String orderCode) {
        return orderDetailsService.getOrderDetails(orderCode);
    }

    /**
     * 获取所有材料信息
     * 本方法通过调用 orderDetailsService 中的 getOrderItemDetails 方法
     * 来获取所有采购订单的材料详情。它将这些材料信息以列表的形式返回
     *
     * @return 包含所有材料详情的列表
     */
    @GetMapping("/getAllMaterials")
<<<<<<< HEAD
    public List<OrderItemEntity> getAll() {
        return orderDetailsService.getOrderItemDetails();
=======
    public List<MaterialZmaraEntity> getAll(@RequestBody String orderCode){
        return orderDetailsService.getOrderItemDetails(orderCode);
>>>>>>> 635f6b1e9a6826548aed96f41442e767940aa057
    }

    /**
     * 添加订单及关联的商品项
     * 本方法通过POST请求接收一个OrderWithItemsDTO对象，该对象包含了订单及关联的商品项的详细信息
     * 主要用于在系统中一次性添加一个新订单及其包含的一个或多个商品项
     *
     * @param purchaseOrderItemsDTO 订单及商品项数据传输对象，包含订单信息及关联的商品项列表
     */
    @PostMapping("/addOrderItem")
    public R<PurchaseOrderItemsDTO> addOrderWithItems(@RequestBody PurchaseOrderItemsDTO purchaseOrderItemsDTO) {
        orderDetailsService.saveOrderDetails(purchaseOrderItemsDTO);
        return R.ok(purchaseOrderItemsDTO, "数据添加成功");
    }

}
